from django.contrib import admin
from django.urls import re_path
from . import views, views_serializer, views_apiview, views_genericapiview, \
    views_mixin, views_childmixinview, views_viewset, views_modelviewset

# 导入自动生成路由类
from rest_framework.routers import SimpleRouter, DefaultRouter

urlpatterns = [
    # 保存(添加)图书 和 获取所有图书
    # re_path(r'^books/$',views.BooksView.as_view()),
    # 获取一本图书 , 更新, 删除
    # re_path(r'^books/(?P<pk>\d+)/$', views.BookView.as_view()),

    # # --------------序列化器的使用---------
    # # 保存图书和获取所有图书
    # re_path(r'^books/$', views_serializer.BooksView.as_view()),
    # # 获取一本图书、更新、删除
    # re_path(r'^books/(?P<pk>\d+)/$', views_serializer.BookView.as_view())

    # # --------------视图类的使用(基类APIView)---------
    # # 保存图书和获取所有图书
    # re_path(r'^books/$', views_apiview.BooksView.as_view()),
    # # 获取一本图书、更新、删除
    # re_path(r'^books/(?P<pk>\d+)/$', views_apiview.BookView.as_view()),

    # # --------------视图类的使用(基类GenericAPIView)---------
    # # 保存图书和获取所有图书
    # re_path(r'^books/$', views_genericapiview.BooksView.as_view()),
    # # 获取一本图书、更新、删除
    # re_path(r'^books/(?P<pk>\d+)/$', views_genericapiview.BookView.as_view()),

    # #  --------------五个拓展视图类的使用---------
    # # 保存图书和获取所有图书
    # re_path(r'^books/$', views_mixin.BooksView.as_view()),
    # # 获取一本图书、更新、删除
    # re_path(r'^books/(?P<pk>\d+)/$', views_mixin.BookView.as_view())

    # #  --------------拓展类子类视图类的使用---------
    # # 保存图书和获取所有图书
    # re_path(r'^books/$', views_childmixinview.BooksView.as_view()),
    # # 获取一本图书、更新、删除
    # re_path(r'^books/(?P<pk>\d+)/$', views_childmixinview.BookView.as_view()),

    # #  --------------视图集ViewSet的使用---------
    # # 因为在视图中定义的方法不再按照请求方式,所以as_view方法中需要指定请求方式和定义方法间的关系
    # # 获取所有图书
    # re_path(r'^books/$', views_viewset.BooksView.as_view({'get': 'list'})),
    # # 获取最后一本图书
    # re_path(r'^books/last_book$', views_viewset.BooksView.as_view({'get': 'last_book'})),

    # #  --------------拓展视图集ModelViewSet的使用--------
    # # 保存图书和获取所有图书
    # re_path(r'^books/$', views_modelviewset.BookModelViewSet.as_view({'get': 'list', 'post': 'create'})),
    # # 获取一本图书、更新、删除
    # re_path(r'^books/(?P<pk>\d+)/$', views_modelviewset.BookModelViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'}))

]
"""
    REST framework提供了两个router:
        SimpleRouter
        DefaultRouter
    register(prefix, viewset, base_name)
    prefix 该视图集的路由前缀
    viewset 视图集
    base_name 路由名称的前缀
"""
# 使用路由类生成router对象
# router = SimpleRouter()
router = DefaultRouter()
# 区别在于Defaultrouter会生成根路径的路由匹配
# DefaultRouter会多附带一个默认的API根视图，返回一个包含所有列表视图的超链接响应数据

# 注册视图集生成路由
router.register(r'books', views_modelviewset.BookModelViewSet, basename='books')
# 多个路由需要生成
# router.register('heros')
# router.register()
# 获取路由结果
print(router.urls)
# 添加路由数据(将生成的路由列表添加到原有的路由列表中)
urlpatterns += router.urls
